const { BrowserWindow, app, Menu, ipcMain } = require('electron')
const Store = require('electron-store')
const path = require('path')
const fs = require('fs')
const indexURL = 'http://localhost:8080/' // 开发
// const indexURL = path.join(__dirname, './dist/index.html') // 生产
const store = new Store()
const defaultOutPath = store.get('defaultOutPath') ? store.get('defaultOutPath') : 'C:\\ProgramData\\filemove\\out'
const defaultInPath = store.get('defaultInPath') ? store.get('defaultInPath') : 'C:\\ProgramData\\filemove\\in'
store.set('defaultOutPath', defaultOutPath)
store.set('defaultInPath', defaultInPath)
const getAppLock = app.requestSingleInstanceLock()
let win = null
const windowConfig = {
  width: 740, // 窗口宽度
  height: 300, // 窗口高度
  frame: false, // 去除标题栏
  transparent: true, // 窗口透明
  title: '一键录屏大师', // title
  backgroundColor: '#202124', // 背景颜色
  resizable: false, // 不可改变大小
  webPreferences: {
    // 上下文隔离
    contextIsolation: false,
    // 允许渲染进程使用node
    nodeIntegration: true,
    // 允许渲染进程使用remote
    enableRemoteModule: true,
    // 预加载
    preload: path.join(__dirname, '/preload.js')
  }
}

// 递归创建目录 异步方法
function mkdirs (dirname, callback) {
  fs.stat(dirname, function (err, stats) {
    console.log(err)
    if (stats && stats.isDirectory()) {
      callback()
    } else {
      mkdirs(path.dirname(dirname), function () {
        fs.mkdir(dirname, callback)
      })
    }
  })
}

mkdirs(defaultOutPath, () => {
  console.log(`${defaultOutPath}--init`)
})
mkdirs(defaultInPath, () => {
  console.log(`${defaultInPath}--init`)
})

// 限制只启动一个应用
if (!getAppLock) {
  app.quit()
} else {
  app.on('second-instance', (event, commandLine, workingDirectory) => {
    // 当运行第二个实例时,将会聚焦到mainWindow这个窗口
    if (win) {
      if (win.isMinimized()) win.restore()
      win.focus()
      win.show()
    }
  })
  app.on('ready', createWindow)
}

function createWindow () {
  win = win != null ? win.show() : new BrowserWindow(windowConfig)
  // 窗口工具条移除
  Menu.setApplicationMenu(null)
  win.loadURL(indexURL)
  require('@electron/remote/main').initialize()
  require('@electron/remote/main').enable(win.webContents)
  win.webContents.openDevTools()
  // 当全部窗口关闭时退出
  app.on('window-all-closed', () => {
  // 在macOS上，除非用户用 Cmd + Q 确定退出
  // 否则绝大部分应用及其菜单栏会保持激活
    if (process.platform !== 'darwin') {
      try {
        app.quit()
      } catch (e) {

      }
    }
  })

  // 自定义最小化按钮
  ipcMain.on('min', () => win.minimize())

  // 自定义关闭应用
  ipcMain.on('closeApp', (e) => {
    e.reply('close-app-finish')
    win.destroy()
    win = null
  })

  // 禁用拖拽区域右键菜单
  const WM_INITMENU = 0x116
  win.hookWindowMessage(WM_INITMENU, (e) => {
    win.setEnabled(false)
    setTimeout(() => {
      win.setEnabled(true)
    }, 100)
    return true
  })
}
